home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf / ASo-Tools / Sources / FlushLibs.asm < prev    next >
Assembly Source File  |  1994-04-02  |  4KB  |  153 lines

  1. ;* $Revision Header built automatically *************** (do not edit) ************
  2. ;*
  3. ;* © Copyright by (none)
  4. ;*
  5. ;* File             : FlushLibs.asm
  6. ;* Created on       : Saturday, 02.04.94 21:40:31
  7. ;* Created by       : Arnold Schommer
  8. ;* Current revision : V1.0
  9. ;*
  10. ;*
  11. ;* Purpose
  12. ;* -------
  13. ;*   - versucht, alle unbenutzten Libraries zu schließen, indem es
  14. ;*     sie öffnet, das DELEXP-Flag setzt und sie dann schließt.
  15. ;*
  16. ;* Revision V1.0
  17. ;* --------------
  18. ;* created on Saturday, 02.04.94 21:40:31  by  Arnold Schommer.   LogMessage :
  19. ;*     --- Initial release ---
  20. ;*
  21. ;*********************************************************************************
  22. REVISION  MACRO
  23.           dc.b "1.0"
  24.           ENDM
  25. REVDATE   MACRO
  26.           dc.b "02.04.94"
  27.           ENDM
  28. REVTIME   MACRO
  29.           dc.b "21:40:31"
  30.           ENDM
  31. AUTHOR    MACRO
  32.           dc.b "Arnold Schommer"
  33.           ENDM
  34. VERNUM    EQU  1
  35. REVNUM    EQU  0
  36. ****************************************************************************
  37.         NOLIST
  38.         INCLUDE "exec/LVO.i"
  39.         INCLUDE "dos/dosextens.i"
  40.         INCLUDE "exec/lists.i"
  41.         INCLUDE "exec/libraries.i"
  42.         INCLUDE "exec/memory.i"
  43.         INCLUDE "exec/execbase.i"
  44.         LIST
  45.  
  46. MAXSTR:         equ     100
  47.  
  48.         STRUCTURE LibName,0
  49.         ; (meine Erfindung, zur kompakten Speicherung der Library-Namen)
  50.         APTR      ln_next
  51.         STRUCT    ln_Name,MAXSTR
  52.         LABEL     ln_SIZEOF
  53.  
  54. ****************************************************************************
  55. ;Register-Variablen:
  56.  
  57. WBMsg:          EQUR d5
  58. LibsAnchor:     equr a5
  59. ****************************************************************************
  60.  
  61.         SECTION prg,CODE
  62.  
  63. ;Library-Namen kopieren:
  64. _main:  moveq   #0,WBMsg
  65.         moveq   #RETURN_FAIL,d3
  66.         move.l  WBMsg,a1        ;a1=0->eigener Task
  67.         CALLEXEC FindTask       ;Wo darf man denn nachschauen ?
  68.         move.l  d0,a4
  69.         tst.l   pr_CLI(a4)      ;von CLI oder WB aus gestartet ?
  70.         bne     fromCLI
  71. ;von WB aus:
  72.         lea     pr_MsgPort(a4),a0
  73.         CALL    WaitPort        ;auf Start-Message warten
  74.         lea     pr_MsgPort(a4),a0
  75.         CALL    GetMsg          ;muß nachher beantwortet werden
  76.         move.l  d0,WBMsg
  77. ****************************************************************************
  78. ;das eigentliche Programm:
  79. fromCLI:
  80. ;Library-Namen kopieren:
  81.         CALLEXEC Forbid         ;keine Änderungen während des Lesens !
  82.  
  83.         sub.l   LibsAnchor,LibsAnchor
  84.         move.l  LibsAnchor,a2
  85.         move.l  LibList+LH_HEAD(a6),a3
  86.  
  87. LibsLoop:
  88.         tst.l   LN_SUCC(a3)
  89.         beq     EndLibList
  90.         tst.w   LIB_OPENCNT(a3)
  91.         bne     NextLib
  92.  
  93.         move.l  #ln_SIZEOF,d0
  94.         move.l  #MEMF_CLEAR,d1
  95.         CALL    AllocMem
  96.         tst.l   d0
  97.         beq     EndLibList              ;Ende der Liste, weil kein Speicher
  98.         move.l  a2,d1   ;tst.l a2
  99.         beq     3$
  100.         move.l  d0,ln_next(a2)
  101.         bra     4$
  102. 3$:     move.l  d0,LibsAnchor
  103. 4$:     move.l  d0,a2
  104.         lea     ln_Name(a2),a0
  105.         move.l  LN_NAME(a3),a1
  106. ;Stringkopie bis (max.) MAXSTR Zeichen:
  107.         moveq   #MAXSTR-1,d0
  108. 1$:     move.b  (a1)+,(a0)+
  109.         dbeq    d0,1$
  110.         move.b  #0,-(a0)
  111.  
  112. NextLib: move.l LN_SUCC(a3),a3
  113.         bra     LibsLoop
  114.  
  115. EndLibList:
  116.         CALL    Permit
  117.  
  118. ; los geht's:
  119. FlushLoop:
  120.         move.l  LibsAnchor,d0   ;tst.l LibsAnchor
  121.         beq     ende
  122.         lea     ln_Name(LibsAnchor),a1
  123.         CALL    OldOpenLibrary
  124.         tst.l   d0
  125.         beq     2$
  126.         move.l  d0,a1
  127.         bset    #LIBB_DELEXP,LIB_FLAGS(a1)
  128.         CALL    CloseLibrary
  129. ; Library-Knoten freigeben:
  130. 2$:     move.l  LibsAnchor,a1
  131.         move.l  ln_next(LibsAnchor),LibsAnchor
  132.         move.l  #ln_SIZEOF,d0
  133.         CALL    FreeMem
  134.         bra     FlushLoop
  135. ****************************************************************************
  136. ende:   tst.l   WBMsg           ;war da was ?
  137.         beq     toCLI           ;na dann halt nicht
  138. ;Message zur WB zurück
  139.         CALL    Forbid
  140.         move.l  WBMsg,a1
  141.         CALL    ReplyMsg
  142. toCLI:  moveq   #RETURN_OK,d0   ;keine Fehler
  143.         rts
  144. ****************************************************************************
  145. ;Versions-String
  146.         dc.b    "$VER: FlushLibs "
  147.         REVISION
  148.         dc.b    " ("
  149.         REVDATE
  150.         dc.b    ")",0
  151.         END
  152.  
  153.